home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software Vault: The Gold Collection
/
Software Vault - The Gold Collection (American Databankers) (1993).ISO
/
cdr11
/
intmemry.zip
/
MEMO1250.TXT
< prev
next >
Wrap
Text File
|
1992-06-24
|
7KB
|
113 lines
╔═════════════════════════════════════════════════════════════════════════╗
║ ║
║ DOS 5.0 and the High Memory Area ║
║ ║
╚═════════════════════════════════════════════════════════════════════════╝
DOS 5.0 AND THE HIGH MEMORY AREA
DOS 5.0 is the first DOS version to make use of the High Memory Area
(HMA), loading a significant portion of the DOS system files into this
memory. As a result, a 286 or later PC can show as much as a 46k gain
in free conventional memory after upgrading to DOS 5.0, simply because
much of resident DOS is now using HMA instead of conventional memory.
History, Background
Because DOS is essentially a REAL mode operating system, it limits
users to accessing only the address range below 1024k. Even on systems
with 286 or later processors that can access megabytes of memory, the
640K limit still exists in the DOS world.
There is, however, one small portion of EXTENDED memory (the memory
above 1024k) that 286 or later processors can access - even with the
processor in REAL mode. This is the 64k of memory from 1024-1068k.
To understand how this memory is accessed, it is necessary to look at
PC memory addressing in general. The PC in REAL mode addresses memory
through a combination of a SEGMENT and an OFFSET. You could think of
this as giving a location by saying it was a certain number of yards
away (the segment) plus a certain number of feet (the offset).
Therefore, something that is at a segment of 7 yards and an offset of 2
feet would have an absolute distance (or address) of 23 feet. Of
course you coud express the same location as a segment of 6 yards and
an offset of 5 feet.
In REAL mode operation, any memory that can be addressed can be
described in a similar fashion. The memory is located in a particular
SEGMENT, at a particular OFFSET from that segment.
On 8086/8088-based computers, there is a maximum to the absolute
address of FFFFF. This could be expressed as a location of SEGMENT
F000 plus OFFSET FFFF (F000:FFFF), or as a location of SEGMENT FFFF
with an OFFSET of 000F (FFFF:000F). The question became, if you could
have a SEGMENT address of FFFF with an OFFSET address of 000F, what
happened when you added 1 to the OFFSET address, and it became 0010?
This was acceptable register math, but it exceeded the maximum memory
the CPU could address.
The answer was, you "wrapped" back into the bottom of conventional
memory. Consequently, this was a boundary condition that became known,
and the PCs using the 8086 and 8088 processors were designed with this
in mind.
When the 80286 processor was introduced into the PC market, there was a
new variable. It could address memory above one megabyte, that is
above an absolute address of FFFFF. There was now the possibility that
FFFF:0010 could describe a unique and valid memory location - something
that couldn't happen on the 8086/8088. In order to insure backward
compatibility, the AT and subsequent computers were designed to
"uncouple" the addressing of the processor from the addressing on the
motherboard. This meant that ATs could be expected to behave the same
as PCs. If you exceeded FFFF:000F, you would "wrap" to the bottom of
conventional memory.
As memory below 1024k became more and more precious, it came to the
attention of inventive folks in the PC industry that the 64k of memory
from 1024 to 1068k was accessible to 286 or later CPUs in REAL mode -
if only the CPU could be "re-coupled" to motherboard addressing. Of
course, the "re-coupling" needed to be selective, so that any code
relying on the "wrap" at the end of memory would still function. The
address line responsible for allowing this access to take place is A20,
and soon A20 handlers began to appear, such as QEXT.SYS and HIMEM.SYS.
What these A20 handlers do is allow some programs to couple or de-
couple the addressing between the motherboard and the CPU, thereby
allowing that program access to the 64k of memory between 1024k and
1068k without the need to go into PROTECTED mode CPU operation. This
64k is referred to as the HMA, or High Memory Area - and to date it may
be controlled by one client only.
DOS 5.0 is the first DOS version to make use of the HMA for DOS itself,
though DOS 4.01 shipped with an HMA manager - HIMEM.SYS. DOS 5.0 does
much more than provide HIMEM, it uses HIMEM (or a HIMEM compatible XMS
driver such as QEMM386 v5.12 or 386MAX v5.1) to manage the HMA and load
a significant portion of the DOS system files into this memory. This is
done by placing the DOS=HIGH command in the CONFIG.SYS file.
As a result, a 286 or later PC can show as much as a 46k gain in free
conventional memory after upgrading to DOS 5.0, simply because much of
resident DOS is now using HMA instead of conventional memory. DOS=HIGH
will also load BUFFERS into the HMA area.
Because the means of coupling and de-coupling the CPU's addressing from
the motherboard's addressing is system-specific, and was never
standardized, the driver must accommodate the various methods that
computer manufacturers have used. In order to do this, some drivers,
such as HIMEM.SYS, require "switches" for particular machines.
Be sure to check the documentation for your software to determine how
to configure it for your particular machine. If you are uncertain, or
if your computer behaves oddly when using the DOS=HIGH command, you
should check with your computer manufacturer to find out the
appropriate setup. The README file with DOS 5.0 lists many of the
popular computers that require special switches for HIMEM.SYS.
Requirements for HMA use: 286, i386, or i486 CPU-based PC XMS (Extended
Memory Specification) driver - HIMEM, QEMM386, 386MAX, etc. At least
64k of extended memory - addressed from 1024k to 1068k.
══════════════════════════════════════════════════════════════════════════════
End of file Intel FaxBack # 1250 June 24,1992